When a software project is contemplated, it is advisable for a software system architect or a software developer to design an architecture for the software system. Often this is done on a whiteboard and the architect hopes that the developers working on the project comply with his design. Often however, what actually happens is that in the flurry of activity involved in getting a product out, developers lose sight of the architectural design and code is produced that does not comply with the architect's design.